/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sudoku.Extras;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.LinkedList;
import javax.swing.JFileChooser;
import sudoku.Modelo.Juego;

/**
 *
 * @author Flubber
 */
public class Archivo {
    
    File archivo;
            
    public Archivo(String nombre) {
            File dir = new File("");
            archivo = new File(dir.getAbsolutePath(), nombre+".sudokuT");
            try {
                archivo.createNewFile();
            } catch (IOException ex) {}
    }
    
        /*
    * Obtiene el contenido de un archivo en un lista.
    * @param f archivo a ser leido.
    * @return lista del contenido de archivos.
    */    
    public LinkedList<String> leerArchivo(){
        LinkedList<String> lista = new LinkedList();;
        try{
            FileReader fr = new FileReader(archivo);
            BufferedReader br = new BufferedReader(fr);
           
            // Lectura del fichero linea por linea
            String linea;
            while(((linea=br.readLine())!=null)){            
                lista.addLast(linea);
            }
            br.close();
        }catch(Exception e){}
        return lista;
    }
        
    /*
    * Guarda el contenido de una lista en un archivo.
    * @param f archivo a ser escrito .
    * @param lista lista con los contenidos a serescrito .
    */    
    public void escribirArchivo(LinkedList<String> lista){
        try{    
            FileWriter fw = new FileWriter (archivo);
            BufferedWriter bw = new BufferedWriter(fw);
            int indice = 0;
            while(indice < lista.size()){
                bw.write(lista.get(indice)+ "\n");
                indice++;
            }
            bw.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public static void GuardarObjeto(Juego juego){
        JFileChooser fc = new JFileChooser();                    
        String path = "";
        if (fc.showSaveDialog(null) == 0)
            path = (new StringBuilder(String.valueOf(fc.getSelectedFile().getAbsolutePath()))).append(".sudokuS").toString();
        if (!path.equals(""))
            try {
                FileOutputStream outFile = new FileOutputStream(path);
                ObjectOutputStream oos = new ObjectOutputStream(outFile);
                oos.writeObject(juego.mIGuardado);
                oos.close();
            } catch (Exception e) {}    
    }
    
    public static void CargarObjeto(Juego juego){
        String path = "";
        JFileChooser fc = new JFileChooser();
        if (fc.showOpenDialog(null) == 0)
            path = fc.getSelectedFile().getAbsolutePath();
        if (path.endsWith(".sudokuS")) {
            try {
                FileInputStream fi = new FileInputStream(path);
                ObjectInputStream ois = new ObjectInputStream(fi);
                juego.cargarEstado((Tripla[][])ois.readObject());
                ois.close();
            }catch (IOException | ClassNotFoundException e) {}   
        }    
    }
}
